// Promise.resolve() // 快速创建一个成功的 promise
const Promise = require("./promise")

// Promise.reject() //  快速创建一个失败的 promise

// 区别在于 resolve 会等待里面的 promise执行完毕 reject 不会有等待效果

// Promise.resolve(123).then(data => console.log(data))

// Promise.resolve(new Promise((resolve, reject) => {
//     setTimeout(() => {
//         resolve('ok')
//     }, 1000);
// })).then(data => console.log(data))
// 等效于
// new Promise((resolve, reject) => {
//     resolve(111)
// }).then(data => {
//     console.log(data)
// })


// finally 表示 不是最终的意思 而是无论如何都会执行的意思
// 如果返回一个 promise 会等待这个 promise 也执行完毕 (如果是 失败的 promise 会用他的失败原因 传给下一个 then)
Promise.prototype.finally = function (callback) {
    return this.then((value) => {
        return Promise.resolve(callback()).then(() => value) 
    }, (reason) => {
        return Promise.resolve(callback()).then(() => { throw reason })
    })
}

Promise.reject(123).finally(() => {
    console.log('finally')
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('ok')
        }, 3000);
    })
}).then(data => {
    console.log(data, 'success')
}).catch(err => {
    console.log(err)
})